<template>
  <div class="j-vxe-drag-box">
    <a-dropdown :trigger="['click']">
      <span><span class="drag-btn">
        <Icon icon="mi:drag"/>
      </span></span>
      <template #overlay>
        <a-menu>
          <a-menu-item key="0" :disabled="disabledMoveUp" @click="handleRowMoveUp">向上移</a-menu-item>
          <a-menu-item key="1" :disabled="disabledMoveDown" @click="handleRowMoveDown">向下移</a-menu-item>
          <a-menu-divider/>
          <a-menu-item key="3" @click="handleRowInsertDown">插入一行</a-menu-item>
        </a-menu>
      </template>
    </a-dropdown>
  </div>
</template>

<script lang="ts">
import { computed, defineComponent } from 'vue'
import { Icon } from '/@/components/Icon'
import { JVxeComponent } from '/@/components/jeecg/JVxeTable/types'
import { useJVxeComponent, useJVxeCompProps } from '/@/components/jeecg/JVxeTable/hooks'

export default defineComponent({
  name: 'JVxeDragSortCell',
  components: { Icon },
  props: useJVxeCompProps(),
  setup(props: JVxeComponent.Props) {
    const { rowIndex, fullDataLength, trigger } = useJVxeComponent(props)

    const disabledMoveUp = computed(() => rowIndex.value === 0)
    const disabledMoveDown = computed(() => rowIndex.value === (fullDataLength.value - 1))

    /** 向上移 */
    function handleRowMoveUp() {
      if (!disabledMoveUp.value) {
        trigger('rowResort', {
          oldIndex: rowIndex.value,
          newIndex: rowIndex.value - 1,
        })
      }
    }

    /** 向下移 */
    function handleRowMoveDown() {
      if (!disabledMoveDown.value) {
        trigger('rowResort', {
          oldIndex: rowIndex.value,
          newIndex: rowIndex.value + 1,
        })
      }
    }

    /** 插入一行 */
    function handleRowInsertDown() {
      trigger('rowInsertDown', rowIndex.value)
    }

    return {
      disabledMoveUp,
      disabledMoveDown,
      handleRowMoveUp,
      handleRowMoveDown,
      handleRowInsertDown,
    }
  },
  // 【组件增强】注释详见：JVxeComponent.Enhanced
  enhanced: {
    // 【功能开关】
    switches: {
      editRender: false,
    },
  } as JVxeComponent.EnhancedPartial,
})
</script>

<style lang="less">
.j-vxe-drag-box {
  .app-iconify {
    cursor: move;
  }
}

.vxe-table--fixed-wrapper {
  .j-vxe-drag-box {
    .app-iconify {
      cursor: pointer;
    }
  }
}
</style>